package com.xlh.dao.user.ext;

import com.xlh.dto.user.CourseClassDTO;
import com.xlh.dto.user.UserInfoDTO;
import com.xlh.enums.user.UserStatusEnum;
import com.xlh.pojo.course.CourseTeacher;
import com.xlh.pojo.user.ClassCourse;
import com.xlh.pojo.user.User;
import com.xlh.pojo.user.UserClass;
import com.xlh.pojo.user.UserExtend;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapperExt {

    /**
     * 获取用户信息
     *
     * @param userNumber 学号/工号
     * @param status     用户状态
     * @return
     */
    List<User> getUserInfo(@Param("userNumber") String userNumber, @Param("status") Integer status);

    /**
     * 除了某个用户，根据用户信息、角色 获取用户全部信息
     *
     * @param userInfo   用户信息
     * @param roles      角色集合
     * @param statusList 状态集合
     * @param userId     用户id
     * @return
     */
    List<UserInfoDTO> listUser(@Param("userInfo") String userInfo, @Param("roles") List<Integer> roles,
                               @Param("statusList") List<Integer> statusList, @Param("userId") Long userId);
    /**
     * 根据课程id获取助教信息
     *
     * @param courseId  课程id
     * @param username  用户姓名
     * @param usernumber 用户工号
     * @return
     */
    List<UserInfoDTO> listUserOtherTeacher(@Param("courseId") Long courseId, @Param("userInfo") String userInfo,@Param("status") Integer status, @Param("userId") Long userId);
    /**
     * 根据用户id集合进行批量删除
     *
     * @param userIds 用户id集合
     * @param status  改的码制
     */
    void batchDeleteUser(@Param("userIds") List<Long> userIds, @Param("status") Integer status);

    /**
     * 批量添加用户
     *
     * @param list 用户信息
     */
    void batchInsertUser(List<User> list);

    /**
     * 获取班级用户
     *
     * @param userInfo   用户信息
     * @param statusList 查询用户状态集合
     * @param classIds   班级id集合
     * @param deleted    是否删除
     * @return
     */
    List<UserInfoDTO> listClassUser(@Param("userInfo") String userInfo, @Param("statusList") List<Integer> statusList,
                                    @Param("classIds") List<Long> classIds, @Param("deleted") Boolean deleted);
    /**
     * 获取班导入级用户
     *
     * @param userInfo   用户信息
     * @param statusList 查询用户状态集合
     * @param deleted    是否删除
     * @return
     */
    List<UserInfoDTO> listClassUserIds(@Param("classIds") List<Long> classIds,@Param("userInfo") String userInfo, @Param("statusList") List<Integer> statusList,@Param("studentIds") List<Integer> studentId,
                                    @Param("deleted") Boolean deleted);

    List<UserInfoDTO> listClassUserDelete(@Param("userInfo") String userInfo, @Param("statusList") List<Integer> statusList,
                                          @Param("classIds") List<Long> classIds);

    /**
     * 批量修改用户额外信息
     *
     * @param userExtends 额外信息
     */
    void updateBatchUserExtend(@Param("userExtends") List<UserExtend> userExtends);
    /**
     * 删除关联关系
     *
     * @param
     */
    void deleteCourseTeacher(@Param("userId") Integer userId, @Param("courseId") Long courseId);

    /**
     * 关联关系
     *
     * @param
     */
    void saveCourseTeacher(@Param("courseTeacher") List<CourseTeacher>  courseTeacher);

    /**
     * 查询班级与课程
     *
     * @param
     */
    List<ClassCourse> queryListCourseClass(@Param("course_id") Long  course_id);


    List<UserInfoDTO> selectByExampleNa(@Param("userNumberList") List<String> userNumberList);

    /**
     * 查询可以使用的用户
     * @param userIds
     * @return
     */
    List<Long> findExistUser(@Param("userIds")List<Long> userIds);


    /**
     * 查询班级下的学生记录关联用户表
     * @param classIds
     * @return
     */
    List<UserClass> findByClassIds(@Param("classIds")List<Long> classIds);



}